package com.itwxz.system.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.itwxz.common.core.domain.R;
import com.itwxz.system.domain.dto.CreateWxzOrderDto;
import com.itwxz.system.domain.po.WxzOrder;
import com.itwxz.system.domain.dto.SelectOrderDto;
import com.itwxz.system.domain.po.YiLaoForm;
import com.itwxz.system.domain.vo.OperateOrderListVo;
import com.itwxz.system.domain.vo.SearchOrderVo;
import com.itwxz.system.domain.vo.StaffRankingVo;

import java.util.List;
import java.util.Map;

/**
 * 维修站订单Service接口
 *
 * @author gastronome
 * @date 2025-04-05
 */
public interface IWxzOrderService extends IService<WxzOrder> {


	/**
	 * 查询维修站订单列表
	 *
	 * @param wxzOrder 维修站订单
	 * @return 维修站订单集合
	 */
	List<SelectOrderDto> selectWxzOrderList(SelectOrderDto wxzOrder);

	/**
	 *  作废订单
	 * @param ids ids
	 * @return 正确否
	 */
	boolean invalidateOrderByIds(Long[] ids);

	/**
	 * 检查订单并更新
	 *
	 * @param wxzOrder 订单参数
	 * @return 是否更新
	 */
	boolean checkAndUpdateById(WxzOrder wxzOrder);

	/**
	 * 导出义劳表
	 *
	 * @param wxzOrder 订单日期范围
	 * @return 义劳表
	 */
	List<YiLaoForm> getYiLaoList(SelectOrderDto wxzOrder);

	/**
	 *  新增订单
	 * @param order o
	 * @return
	 */
	R<String> createWxzOrder(CreateWxzOrderDto order);

	/**
	 * 接单并更新订单状态
	 * <p>
	 * 该方法用于接单操作，将订单的状态更新为已接单。
	 * </p>
	 *
	 * @param orderId 订单ID
	 * @return 返回接单操作的结果，成功时返回"接单成功"信息，失败时返回失败信息
	 */
	R<String> accepAndUpdateOrder(String orderId, Long userId);

	/**
	 * 完成订单（将状态改为已完成）
	 *
	 * @param orderId 订单ID
	 * @param userId
	 * @return 操作结果
	 */
	R<String> completeOrderById(Long orderId, Long userId);

	/**
	 * 转让订单
	 * @param orderId 订单ID
	 * @return 操作结果
	 */
	R<String> transferOrder(Long orderId, Long userId);

	List<Map<String, Object>> orderStatistics();

	List<WxzOrder> getInProgressListByMe(Long userId);

	OperateOrderListVo getOperateList();

	List<Map<String, Object>> getOrderCountByBuilding();

	List<Map<String, Object>> selectRecent7DaysOrderCount();

	List<SearchOrderVo> searchOrder(String keyword);

	List<StaffRankingVo> getRanking();

	List<SearchOrderVo> selectOrderStatus23();

	/**
	 * 清除数据库全部订单
	 * @return 作结果
	 */
	boolean resetSemester();
}
